/*
 * Created on 29.06.2006.
 */
package esdomaci.gamemap;

/**
 * @author Milan Aleksic, milanaleksic@gmail.com
 */
public class Stanje {
    
    private boolean poseceno = false;    
    private int sumnjivost = 0;    
    private int fiksnost = 0;
    
    // sumnje
    public static final int SUMNJIVO_RUPA = 0x0001;
    public static final int SUMNJIVO_KANIBAL = 0x0002;
    public static final int SUMNJIVO_ZLATO = 0x0004;
    
    // fiksni opisi
    public static final int FIKSNO_RUPA = 0x0001;
    public static final int FIKSNO_KANIBAL = 0x0002;
    public static final int FIKSNO_ZLATO = 0x0004;
    
    public static final int FIKSNO_BEZBEDNO = 0x1000;
    
    public Stanje() {
        poseceno = false;
    }    
    
    public boolean isPoseceno() {
        return poseceno;
    }    
    
    public void setPoseceno(boolean poseceno) {
        this.poseceno = poseceno;
    }    
    
    public boolean isSumnjivo() {
        return sumnjivost != 0;
    }   
    
    public boolean isProstaSumnja() {
        return ((sumnjivost == SUMNJIVO_RUPA) 
                || (sumnjivost == SUMNJIVO_KANIBAL) 
                || (sumnjivost == SUMNJIVO_ZLATO));
    } 
    
    public boolean isBezbedno() {
        return (fiksnost == FIKSNO_BEZBEDNO);
    } 
    
    public boolean isFiksno() {
        return fiksnost != 0;
    }    
    
    public boolean imaSumnjivost(int sumnja) {
        return (sumnjivost & sumnja) == sumnja;
    }
    
    public boolean imaFiksnost(int mozdaFiksno) {
        return (fiksnost & mozdaFiksno) == mozdaFiksno;
    }
    
    public boolean imaSumnjivostIliFiksnost(int filter) {
        return imaFiksnost(filter) || imaSumnjivost(filter);
    }
    
    public int getSumnjivost() {
        return sumnjivost;
    }
    
    public void setSumnjivost(int sumnjivost) {
        this.sumnjivost = sumnjivost;
    }
    
    public int getFiksnost() {
        return fiksnost;
    }
    
    public void setFiksnost(int fiksnost) {        
        if ((fiksnost == FIKSNO_ZLATO)&&(this.fiksnost!=0))
            ; // e pa ovo ne sme!            
        else if (((fiksnost == FIKSNO_RUPA) && ((this.fiksnost & FIKSNO_KANIBAL) == FIKSNO_KANIBAL))
            || ((fiksnost == FIKSNO_KANIBAL) && ((this.fiksnost & FIKSNO_RUPA) == FIKSNO_RUPA)))
            this.fiksnost = FIKSNO_KANIBAL + FIKSNO_RUPA;
        else
            this.fiksnost = fiksnost;        
        
        if (isBezbedno())
            sumnjivost = 0;
        else if (fiksnost == sumnjivost)
            sumnjivost = 0;
    }
    
    public String toString() {
        switch (fiksnost) {
        	case FIKSNO_BEZBEDNO: 
        	    return "безбедна одаја";
        	case FIKSNO_KANIBAL:
        	case FIKSNO_KANIBAL+FIKSNO_ZLATO:
        	    return "одаја канибала";
        	case FIKSNO_RUPA:
        	case FIKSNO_RUPA+FIKSNO_ZLATO:        	    
        	    return "одаја са рупом";
        	case FIKSNO_ZLATO:
        	    return "одаја са златом";
        	case (FIKSNO_KANIBAL+FIKSNO_RUPA):
        	    return "одаја и са канибалом и са рупом";
        	default:
        	    return "нејасно ми је...";
        }
    }
}